memcached 的使用(二)

memcached的使用场景:

  1.数据库select出来的memcached处理                                2.会话控制session的使用

memcached的基本设置:

-p 监听的端口 
-l 连接的IP地址默认是本机 
-d start 启动memcached服务 
-d restart 重起memcached服务 
-d stop|shutdown 关闭正在运行的memcached服务 
-d install 安装memcached服务 
-d uninstall 卸载memcached服务 
-u 以的身份运行 (仅在以root运行的时候有效
-m 最大内存使用,单位MB。默认64MB ,最大好像2G
-M 内存耗尽时返回错误,而不是删除项 
-c 最大同时连接数,默认是1024 
-f 块大小增长因子,默认是1.25 
-n 最小分配空间,key+value+flags默认是48 
-h 显示帮助

-P <file> 将PID写入文件<file>,这样可以使得后边进行快速进程终止, 需要与-d 一起使用

 

启动:memcached -d -u root -m 1024 -p 11211 -c 10240 -P /tmp/memcached.pid    [端口可以更换,默认是11211]

退出:kill `cat /tmp/memcached.pid`

        killall   memcached

[  另外一种pid不写入文件:启动: memcached -d -u root -m 1024 -p 11211 -c 10240

                                   退出:kill   mencached的进程id

  ]

查看memcached是否在运行:netstat tnl | grep memcached的进程端口         //netstat tnl | grep 1121;有信息显示则启动,否则没启动

 

------------------------------------------------------------------------------------------------------------------------------------------------------------

 memcached 的查看获取可以在telnet中获取和查看:

1.链接到memcached

telnet  192.168.58.128  [第二个参数是ip地址]

add name 0 60 5 [add是指令名, name是key的名字(以key/value存放),0 标志,60表示存放60秒,5表示放入5个字节的数据]如果key存在,再放入是失败。放入的数据必须要等于5个字节。否则报错。

get name //获取name的值

 

更新:

set name 0 60 5 //如果key存在就是更新,不存在,就是添加

 

删除:

delete key 值

清空:flush_all;

其他的命令看手册。

 

 ---------------------------------------------------------分割线----------------------------------------------------------------------------------------

测试:memcached

1.php

$mem = new memcache;

$mem->connect('localhost',11211);

$info = $mem->add('aa','hello,word');

var_dump($info);就能查看到信息。

ps:对于memcache其他的函数的用法,见php手册

 

---------------------------------------------------------------------分割线--------------------------------------------------------------------

memcached在php中的运用:(看php手册)

 使用memcached内存缓存,在php中,第一次查询把数据的key,放到memcached中,第二次同样查询的时候先访问memcached,看是否有对应的key,如果有就直接取出来;如果过期或没有,就会查询数据库,然后再一次存入memcached当中。以此重复。

 例子:

  $sid = $_GET['sid'];

//到memcached缓存当中查看是否有信息。

$mem = new memcace;

if($info = $mem->get($sid)){

//取出信息

echo $info;

exit;

}

 如果没有;查询数据库

ob_start();

$sql=".....";

$sid = xxxxx;

//把从数据库中获取的结果,放到memcached当中;

$mem->add($sid,ob_get_contents(),MEMCACHE_COMPRESSED,60*60*24);

 

 --------------------------------------------------------------------分割线-----------------------------------------------------

多个memcached的使用,集群:

配置多个memcached服务器,那么网站就根据情况,均衡算法自动挑选合适的memcached服务器进行缓存;

$mem = new memcache;

$mem->connect('localhost',11211);

$mem->addServer('192.168.1.100',11211);

$mem->addServer('192.168.1.203',11211);

$mem->addServer('192.168.1.14',11211);

//其他一样使用还是一样不变。

$mem->add('name','shah',0100);

具体看手册;

 

linux下memcached安全:

iptables -a input -p 协议 -s 可以访问ip -dport 端口 -j ACCEPT

-----------------------------------------------------------------------------分割线------------------------------------------------------------

小结:

1.由于数据仅仅是存在内存当中,因此如果重启memcached、重启操作系统会导致数据全部消失,另外,内容容量达到指定值之后,就基于LRU(Least Recently Used)算法自动删除不使用的缓存

2.memcached本身是为缓存而设计的服务器,没有考虑到数据的永久性问题,而且不支持备份和故障恢复,memcached还很浪费内存

基于上面2点,可以考虑用redis存储数据,他能将数据保存在内存中,并且定时向硬盘同步(redis是单线程,memcached是多线程)

 

 

 

posted on 2014-04-27 00:53  paly76  阅读(264)  评论(0编辑  收藏  举报

导航